以下筆記摘錄自『 The Go Workshop 』。
如果遇到需要一大堆if敘述才能處理的狀況,就可以引用Go語言裡的另一種條件判斷敘述:Switch。
switch <起始賦值敘述>; <運算式> {
case <運算式> :
<程式敘述>
case <運算式>, <運算式>:
<程式敘述>
fallthrough
...
default:
<程式敘述>
與if敘述只能使用布林運算式不同,Switch運算式回傳值可以是非布林值。
上述的起始賦值敘述/運算式都是非必要,可以只寫其中一個(switch <起始賦值敘述>
或 switch <運算式>
),也可以兩個都不寫。如果沒有寫運算式,效果就跟寫成switch true
一樣。
case用來檢查要執行的條件,運算式有兩種寫法,可以寫成像if敘述的布林運算式,或者直接寫一個值,這個值會跟swith自身運算式的值做比較。
後面的程式敘述跟if程式區很像,但不需要用大括號。
Go語言會一由上至下的順序檢查各個case得值或運算式,只要找的一個檢查通過的case,Go語言就會只執行它對應的程式敘述並離開switch,這點與許多其他語言的switch不太一樣。
使用fallthrough則可以讓Go語言執行到該行後繼續往下檢查下一個case的條件。
default敘述作用同if敘述中的else,當所有case的運算式都不成立或值不符合時,就會執行它。
package main
import (
"fmt"
"time"
)
func main() {
day := time.Monday
switch day {
case time.Monday:
fmt.Println("星期一,猴子穿新衣")
case time.Tuesday:
fmt.Println("星期二,猴子肚子餓")
case time.Wednesday:
fmt.Println("星期三,猴子去爬山")
case time.Thursday:
fmt.Println("星期四,猴子去考試")
case time.Friday:
fmt.Println("星期五,猴子去跳舞")
case time.Saturday:
fmt.Println("星期六,猴子去斗六")
case time.Sunday:
fmt.Println("星期日,猴子過生日")
default:
fmt.Println("日期不正確")
}
}
//output
星期一,猴子穿新衣